package com.lin.learning.questionmanagement.service.serviceimpl;


import com.lin.learning.questionmanagement.service.UploadService;
import com.lin.learning.questionmanagement.vo.FileVo;
import com.our.learning.infrastructure.pojo.ResponseResult;
import com.qcloud.cos.COSClient;
import com.qcloud.cos.ClientConfig;
import com.qcloud.cos.auth.BasicCOSCredentials;
import com.qcloud.cos.auth.COSCredentials;
import com.qcloud.cos.http.HttpProtocol;
import com.qcloud.cos.model.GetObjectRequest;
import com.qcloud.cos.model.ObjectMetadata;
import com.qcloud.cos.model.PutObjectRequest;
import com.qcloud.cos.model.PutObjectResult;
import com.qcloud.cos.region.Region;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;

@Service
public class OSSUploadServiceImpl implements UploadService {
//TODO 此处前端上传图像无法成功是因为前端没有携带token需要到前端代码去改,我自己改成不需要token
    private String secretId="AKIDUoyve8Q3UiiU3OWQ7aqsuiJgok8LK6dw";
    private String secretKey="QnyvfCWdV8YkiTDk49zhEYfYEhx0pTvA";
    private String bucket="paniclin-1308280027";
    private String region="ap-guangzhou";

    @Override
    public ResponseResult upload(MultipartFile img) throws IOException {
        //判断文件类型
        String originalFilename = img.getOriginalFilename();
        if (!(originalFilename.endsWith(".png")||originalFilename.endsWith("jpg"))){
            //throw new SystemException(AppHttpCodeEnum.FILE_TYPE_ERROR);
        }
        //获取文件名称（可能包含路径）
        String fileName=originalFilename;
//获取最后"/"的索引
        int startIndex = originalFilename.replaceAll("\\\\", "/").lastIndexOf("/");
//截取文件名，根据业务，文件后缀也可去掉
        fileName = fileName.substring(startIndex + 1);
        String uploadOss = uploadOss(img, originalFilename);
        FileVo fileVo=new FileVo(uploadOss,uploadOss,fileName);
        return ResponseResult.okResult(fileVo);
    }

    @Override
    public ResponseResult downloadOss(String path) throws IOException {
/*        // 生成 cos 客户端。
        // 1 初始化用户身份信息（secretId, secretKey）。
        // SECRETID和SECRETKEY请登录访问管理控制台 https://console.cloud.tencent.com/cam/capi 进行查看和管理
        COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);
        // 2 设置 bucket 的地域, COS 地域的简称请参照 https://cloud.tencent.com/document/product/436/6224
        // clientConfig 中包含了设置 region, https(默认 http), 超时, 代理等 set 方法, 使用可参见源码或者常见问题 Java SDK 部分。
        Region toregion = new Region(region);
        ClientConfig clientConfig = new ClientConfig(toregion);
        // 这里建议设置使用 https 协议
        // 从 5.6.54 版本开始，默认使用了 https
        clientConfig.setHttpProtocol(HttpProtocol.https);
        // 3 生成 cos 客户端。
        COSClient cosClient = new COSClient(cred, clientConfig);
        // 设置要下载到的本地路径
        File downFile = new File("C:/desktop");
        //String key = "test/"+path;

        GetObjectRequest getObjectReq = new GetObjectRequest(bucket, path);
        ObjectMetadata downObjectMeta = cosClient.getObject(getObjectReq, downFile);*/
        return ResponseResult.okResult("https://paniclin-1308280027.cos.ap-guangzhou.myqcloud.com/"+path);
    }


    public String uploadOss(MultipartFile img, String originalFilename) throws IOException {
/*        //获取文件名称（可能包含路径）
        String fileName = file.getOriginalFilename();
        //获取最后"/"的索引
        int startIndex = fileName.replaceAll("\\\\", "/").lastIndexOf("/");
        //截取文件名，根据业务，文件后缀也可去掉
        fileName = fileName.substring(startIndex + 1);*/
        // 1 初始化用户身份信息（secretId, secretKey）。
        // SECRETID和SECRETKEY请登录访问管理控制台 https://console.cloud.tencent.com/cam/capi 进行查看和管理
        COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);
        // 2 设置 bucket 的地域, COS 地域的简称请参照 https://cloud.tencent.com/document/product/436/6224
        // clientConfig 中包含了设置 region, https(默认 http), 超时, 代理等 set 方法, 使用可参见源码或者常见问题 Java SDK 部分。
        Region toregion = new Region(region);
        ClientConfig clientConfig = new ClientConfig(toregion);
        // 这里建议设置使用 https 协议
        // 从 5.6.54 版本开始，默认使用了 https
        clientConfig.setHttpProtocol(HttpProtocol.https);
        // 3 生成 cos 客户端。
        COSClient cosClient = new COSClient(cred, clientConfig);

        // 指定要上传的文件
        String[] filename = null;
        filename  = originalFilename.split("\\.");
        File localFile = File.createTempFile(filename[0], filename[1]);
        img.transferTo(localFile);
// 指定文件将要存放的存储桶
        String bucketName = bucket;
// 指定文件上传到 COS 上的路径，即对象键。例如对象键为folder/picture.jpg，则表示将文件 picture.jpg 上传到 folder 路径下

//获取文件名称（可能包含路径）
        String fileName=originalFilename;
//获取最后"/"的索引
        int startIndex = originalFilename.replaceAll("\\\\", "/").lastIndexOf("/");
//截取文件名，根据业务，文件后缀也可去掉
        fileName = fileName.substring(startIndex + 1);
        String s = fileName;
        String key = s;
        PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, localFile);
        PutObjectResult putObjectResult = cosClient.putObject(putObjectRequest);
        return "https://paniclin-1308280027.cos.ap-guangzhou.myqcloud.com/"+key;
    }
}
